package thread;
/**
 * 当在静态方法上使用 synchronized后，该方法是一个同步方法。由静态方法所属类，所以一定
 * 具有同步效果。
 */
public class SyncDemo3 {
    public static void main(String[] args) {
       // FOO  foo=new FOO();
        Thread t1=new Thread(){
            public void run(){
                FOO.dosome();
            }
        };
        Thread t2=new Thread(){
            public void run(){
                FOO.dosome();
            }
        };
        t1.start();
        t2.start();
    }
}
class FOO{
    /**
     * 静态方法上使用synchronized后，同步监视器对象为当前类的类对象（Class的实例）
     * 在JVM中，每个被加载的类都有且只有一个类对象（Class的实例）与之对应，每个Class
     * 的实例都可以描述其表示的类的信息。注：后期反射知识点会介绍Class
     * 下面dosome方法的同步监视器对象就是FOO的类对象。
     */
   // public synchronized static void dosome(){
    public static void dosome() {
        synchronized (FOO.class) {//静态块也指定当前类的类对象，获取方式：类名.class
            Thread t = Thread.currentThread();
            System.out.println(t.getName() + ":在执行dosome方法.....");

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
            }
            System.out.println(t.getName() + "：执行dosome方法完成！");
        }
    }
}
